/**
 * 创建人:  @author huangpeng    
 * 创建时间:  2023年01月07日 11:40
 * 项目名称:  lemon-blog-cloud
 * 文件名称:  BaseMapper
 * 文件描述:  @Description: 公共mapper
 * 公司名称:  柠檬
 *
 * All rights Reserved, Designed By 柠檬 
 * @Copyright: 2022-2023
 *
 */
package com.lemon.common.core.base;

import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 包名称：com.lemon.common.core.base
 * 类名称：BaseMapper
 * 类描述：公共mapper
 * 创建人：@author huangpeng
 * 创建时间：2023年01月07日 11:40
 */
public interface BaseMapper<T> {

    /**
     * 根据map参数查询数据库记录
     * @Title: queryListByParams
     * @Description: 根据map参数查询数据库记录
     * @param params 查询参数
     * @return: List<T>
     * @throws:
     * @author: huangpeng
     * @Date: 2023/1/7 11:45
     */
    List<T> queryListByParams(Map<String, Object> params);

    /**
     * 插入数据到数据库
     * @Title: insert
     * @Description: 插入数据到数据库
     * @param model 数据
     * @return: int
     * @throws:
     * @author: huangpeng
     * @Date: 2023/1/7 11:46
     */
    int insert(T model);

    /**
     * 选择性插入数据到数据库
     * @Title: insertSelective
     * @Description: 选择性插入数据到数据库
     * @param model 数据
     * @return: int
     * @throws:
     * @author: huangpeng
     * @Date: 2023/1/7 11:55
     */
    int insertSelective(T model);

    /**
     * 根据主键删除数据库的记录
     * @Title: deleteByPrimaryKey
     * @Description: 根据主键删除数据库的记录
     * @param id 主键
     * @return: int
     * @throws:
     * @author: huangpeng
     * @Date: 2023/1/7 11:46
     */
    int deleteByPrimaryKey(Long id);

    /**
     * 根据主键批量删除
     * @Title: deleteByBatch
     * @Description: 根据主键批量删除
     * @param ids 主键数组
     * @return: int
     * @throws:
     * @author: huangpeng
     * @Date: 2023/1/7 11:51
     */
    int deleteByBatch(Long[] ids);

    /**
     * 根据主键更新数据库记录
     * @Title: updateByPrimaryKey
     * @Description: 根据主键更新数据库记录
     * @param model 数据
     * @return: int
     * @throws:
     * @author: huangpeng
     * @Date: 2023/1/7 11:51
     */
    int updateByPrimaryKey(T model);

    /**
     * 根据主键选择性更新数据
     * @Title: updateByPrimaryKeySelective
     * @Description: 根据主键选择性更新数据
     * @param model 数据
     * @return: int
     * @throws:
     * @author: huangpeng
     * @Date: 2023/1/7 11:51
     */
    int updateByPrimaryKeySelective(T model);

    /**
     * 根据主键查询数据库记录
     * @Title: selectByPrimaryKey
     * @Description: 根据主键查询数据库记录
     * @param id 主键
     * @return: T
     * @throws:
     * @author: huangpeng
     * @Date: 2023/1/7 11:53
     */
    T selectByPrimaryKey(Long id);

    /**
     *
     * 批量插入数据库数据
     * @Title: batchInsert
     * @Description: 批量插入数据库数据
     * @param list 数据列表
     * @return: int
     * @throws:
     * @author: huangpeng
     * @Date: 2023/1/7 11:59
     */
    int batchInsert(@Param("list") List<T> list);

    /**
     * 根据主键批量更新数据库数据
     * @Title: updateBatch
     * @Description: 根据主键批量更新数据库数据
     * @param list 数据列表
     * @return: int
     * @throws:
     * @author: huangpeng
     * @Date: 2023/1/7 11:58
     */
    int updateBatch(List<T> list);

    /**
     * 根据主键选择性批量更新数据库数据
     * @Title: updateBatchSelective
     * @Description: 根据主键选择性批量更新数据库数据
     * @param list 数据列表
     * @return: int
     * @throws:
     * @author: huangpeng
     * @Date: 2023/1/7 11:58
     */
    int updateBatchSelective(List<T> list);
}
